// import WxRequest from 'mina-request'
import WxRequest from './request'
import { getStorage,clearStorage } from './storage'
import { modal,toast } from './extendApi'
import { env } from './env' 

// 对WxRequest进行实例化
const instance = new WxRequest({
  // baseUrl : 'https://gmall-prod.atguigu.cn/mall-api',
  baseUrl : env.baseUrl,
  timeout : 15000,
  isLoading: false,
})

// 实例拦截器
// 配置请求拦截器
instance.interceptors.request = (config) => {
  // 在请求发送之前做点么...

  // 在发送请求之前， 需要先判断本地是否存在访问令牌 token
  const token = getStorage('token')

  //如果存在 token ,就需要在请求头中添加token字段
  if(token){
    config.header['token'] = token;
  }
  return config;
}

// 配置响应拦截器
instance.interceptors.response = async (response) => {
  // 从 response 中解构 isSuccess
  const { isSuccess,data } = response
  // 如果isSuccess 为false, 说明执行了fail回调函数
  // 这时候就说明网络异常，需要给用户提示网络异常
  if(!isSuccess) {
      wx.showToast({
        title: '网络异常请重试',
        icon: 'error'
      })
      return response;
  }

  // 判断服务器响应的业务状态码
  switch(data.code) {
    case 200 :
      // 如果后端返回的业务状态码等于 200 说请求成功，服务器成功响应了数据
      // 对服务器响应数据做点什么...
      return data;
    // 如果返回的业务状态码等于 208，说明没有token, 或者token 失效
    // 就需要让用户登录或者重新登录  
    case 208 :
      // 因为返回的是一个 promis 所以要加个 await，最近的函数要加个 async
      const res = await modal({
        content: '鉴权失败，请重新登录',
        showCancel : false, // 不显示取消按钮
      })
      // 如果 res 为 treu，说明用户点击了modal或者页面。
      console.log('code-208',res)
      if(res) {
        // 清除之前失效的token，同时要清除本地存储的全部信息
        clearStorage()
        // 跳转到登录页面
        wx.navigateTo({
          url: '/pages/login/login'
        })
      }
      return Promise.reject(response);
    default :
      toast({
        title: '程序出现异常，请联系客服或稍后重试'
      })
      return Promise.reject(response);
  }



}

// 将 WxRequest 实例进行暴露出去，方便在其他文件中进行使用
export default instance 